#ifndef SAVELOG_H
#define SAVELOG_H

#include <QObject>

class QFile;

//消息类型
enum MsgType {
    MsgType_Debug = 0x0001,
    MsgType_Info = 0x0002,
    MsgType_Warning = 0x0004,
    MsgType_Critical = 0x0008,
    MsgType_Fatal = 0x0010,
};

#define SaveLogIns SaveLog::Instance()

class SaveLog : public QObject
{
    Q_OBJECT
public:
    explicit SaveLog(QObject *parent = nullptr);
    ~SaveLog();

    static SaveLog *Instance();

private:
    //是否正在运行
    bool isRun;
    //文件最大行数 0表示不启用
    int maxRow,currentRow;
    //文件最大大小 0表示不启用
    int maxSize;
    //是否输出日志上下文
    bool useContext;

    //文件对象
    QFile *file;
    //日志文件路径
    QString path;
    //日志文件名称
    QString name;
    //日志文件完整名称
    QString fileName;
    //消息类型
    MsgType msgType;

private slots:
    void openFile(const QString &fileName);

public slots:
    bool GetUseContext();
    MsgType GetMsgType();

public slots:
    //启动日志服务
    void Start();
    //暂停日志服务
    void Stop();

    //清空状态
    void Clear();
    //保存日志
    void Save(const QString &content);

    //设置日志文件最大行数
    void SetMaxRow(int maxRow);
    //设置日志文件最大大小，单位kb
    void SetMaxSize(int maxSize);

    //设置是否输出日志上下文
    void SetUseContext(bool useContext);

    //设置日志文件存放路径
    void SetPath(const QString &path);
    //设置日志文件名称
    void SetName(const QString &name);
    //设置消息类型
    void SetMsgType(const MsgType &msgType);

signals:
    void flushLogUI(const QString &msg);
};

#endif // SAVELOG_H
